Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant
Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
  Type '"object" | "workspace" | "user" | "session" | "org"' is not
  assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
  Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
  assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

File Before After
src/server.ts:13 z.enum(['session', 'user', 'workspace', 'org', 'object']) z.enum(['workspace', 'user', 'global'])
src/server.ts:65 tool description listed all 5 old scopes description updated to the 3 canonical ones
src/tools/memory.ts:38-44 Set of 5 old literals Set of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.

Aligning both call sites to the canonical persona-kit shape:

  - `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
  - `VALID_SCOPES`      → new Set(['workspace', 'user', 'global'])
  - memory.save tool description updated to match

The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.

Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 13, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s) Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check ✅ Passed The description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);
+import { MEMORY_SCOPES } from './tools/memory.js';
+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
 const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
-  'workspace',
-  'user',
-  'global'
+  ...MEMORY_SCOPES
 ]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant
Copy link
Copy Markdown
Member Author

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant